AWS CLI v2で Lambda を呼び出す際 payload を指定するとエラーになる事象を回避するには
困っていた内容
AWS CLI v2 で Lambda の呼び出しを行っています。
--payload
を指定すると、コマンドがエラーとなり Lambda が呼び出せません。対処方法を教えてください。
どう対応すればいいの?
コマンドに--cli-binary-format raw-in-base64-out
を追加してください。
AWS CLI バージョン 2 で Lambda の--payload
を指定する場合、原則として--cli-binary-format raw-in-base64-out
が必要になります。
AWS Lambda関数の呼び出しがAWS CLI v2にアップデートすると失敗する | DevelopersIO
簡単にまとめれば、バイナリパラメーター(blob)を指定する際にはBase64でエンコードしてね、ということです。lambda invokeの--payloadはblobで指定することになっています。そのためAWS CLI v2ではペイロードをBase64でエンコードする必要があるわけです。それでは実例も交えて確認してみましょう。
--cli-binary-format
パラメータが不足している場合、次のようなエラーとなります。
$ aws lambda invoke --function-name hato-lambda \ --payload '{ "a": "a" }' response.json Invalid base64: "{ "a": "a" }"
$ aws lambda invoke --function-name hato-lambda \ --payload '{ "あ": "い" }' response.json string argument should contain only ASCII characters
$ aws lambda invoke --function-name hato-lambda \ --payload '{ "key": "value" }' response.json An error occurred (InvalidRequestContentException) when calling the Invoke operation: Could not parse request body into json: Could not parse payload into json: Unexpected character ((CTRL-CHAR, code 145)): expected a valid value (JSON String, Number, Array, Object or token 'null', 'true' or 'false') at [Source: (byte[])"��j[�"; line: 1, column: 2]
そのため AWS CLI バージョン 2 で、 Lambda の--payload
を指定する場合は--cli-binary-format raw-in-base64-out
を追加してください。
$ aws lambda invoke --function-name hato-lambda --cli-binary-format raw-in-base64-out \ --payload '{ "a": "a" }' response.json { "StatusCode": 200, "ExecutedVersion": "$LATEST" }
参考資料
AWS CLI バージョン 2 を使用している場合、cli-binary-format オプションは必須です。
AWS CLI バージョン 2 を使用している場合、cli-binary-format オプションは必須です。
バイナリパラメータはデフォルトで base64 エンコードされた文字列として渡されるようになりました
AWS CLI では、base64 でエンコードされた文字列を必要とするコマンドもあれば、UTF-8 エンコードのバイト文字列が必要なコマンドもあります。AWS CLI バージョン 1 では、2 つのエンコードされた文字列型間でデータを渡すには、多くの場合、中間処理が必要でした。AWS CLI バージョン 2 では、バイナリパラメータの処理の一貫性が向上するため、1 つのコマンドから別のコマンドに、より確実に値を受け渡すことができます。
AWS CLI バージョン 2 では、デフォルトですべてのバイナリ入力パラメータとバイナリ出力パラメータが base64 でエンコードされた文字列 blobs (バイナリラージオブジェクト) として渡されます 詳細については、「blob」を参照してください。
AWS CLI バージョン 1 の動作に戻すには、cli_binary_format ファイル設定または --cli-binary-format パラメータを使用します。